package com.zijidelu.luframework.infrastructure.factory;

import com.zijidelu.luframework.base.model.DataModel;
import com.zijidelu.luframework.base.model.PO;
import com.zijidelu.luframework.domain.model.entity.Entity;
import com.zijidelu.luframework.infrastructure.converter.AggregateConverter;
import com.zijidelu.luframework.infrastructure.converter.DataConverter;

/**
 * 转换器缓存接口。
 *
 * @author ZIJIDELU
 * @datetime 2025/11/27 14:53
 */
public interface ConverterVault {
    /**
     * 注册聚合转换器
     *
     * @param clazz     实体Class
     * @param converter 聚合转换器
     */
    AggregateConverter<?, ?, ?> registerAggregateConverter(Class<?> clazz, AggregateConverter<?, ?, ?> converter);

    /**
     * 获取聚合转换器
     *
     * @param clazz 实体Class
     * @return 聚合转换器
     */
    <P extends PO, D extends DataModel, E extends Entity<D>> AggregateConverter<P, D, E> getAggregateConverter(Class<?> clazz);


    /**
     * 注册数据转换器
     *
     * @param clazz     数据类型
     * @param converter 数据转换器
     */
    DataConverter<?, ?> registerDataConverter(Class<?> clazz, DataConverter<?, ?> converter);

    /**
     * 获取数据转换器
     *
     * @param clazz 数据类型
     * @return 数据转换器
     */
    <P extends PO, D extends DataModel> DataConverter<P, D> getDataConverter(Class<?> clazz);
}
